In order to implement communication fault tolerance, and in some cases increase data throughput, a computer system may couple to a network by way of a plurality of communication ports (hereinafter just ports), with the ports either implemented on a single network interface card (NIC) or the ports implemented on multiple NICs. The communication ports are “teamed” such that, regardless of the actual number of ports, the ports appear as a single port to application level programs.
In some cases, a primary port both sends and receives all communication packets, with the non-primary ports idled until such time as the primary port experiences a fault. In the case of a fault, one of the non-primary ports becomes primary, and the new primary sends and receives all communication packets. In other cases, regardless of which port is primary, message packets from clients on the network are distributed across the ports. Distribution of client-sourced message packets may be by operation of the switch or router to which the computer system couples (switch-assisted load balancing), or the distribution may be implemented by actions of software of the computer system.
In some cases the computer system software-based distribution of client-sourced message packets is by virtue of a software driver intercepting computer system responses to address resolution protocol (ARP) messages, and selective assigning media access control (MAC) addresses such that each client is given a particular port with which to communicate; however, MAC address assignments (and therefore port assignments) to each client by a software driver intercepting the ARP messages does not take into account the ever changing state of the attached network, especially where ports couple to the network through different switch or router devices.